library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity reg_8x8 is
    Port ( clk : in  STD_LOGIC; --тактовый сигнал
           wr : in  STD_LOGIC; --резрешение записи
           rst : in  STD_LOGIC; --очистка
           addr_in : in  STD_LOGIC_VECTOR (2 downto 0); --адрес входа
           data_in : in  STD_LOGIC_VECTOR (7 downto 0); --вход
           addr_out1 : in  STD_LOGIC_VECTOR (2 downto 0);--адрес выхода 1
           addr_out2 : in  STD_LOGIC_VECTOR (2 downto 0);--адрес выхода 2
           data_out1 : out  STD_LOGIC_VECTOR (7 downto 0); --выход 1
           data_out2 : out  STD_LOGIC_VECTOR (7 downto 0)); --выход 2
end reg_8x8;

architecture BEH of reg_8x8 is 
    type reg_array is array (0 to 7) of STD_LOGIC_VECTOR (7 downto 0);
    signal reg : reg_array; -- массив для хранения данных
begin
    process(clk, rst) 
    begin
        if rst = '0' then  -- сброс при низком уровне сигнала rst
            reg <= (others => (others => '0'));
        elsif rising_edge(clk) then
            if wr = '1' then
                reg(to_integer(SIGNED(addr_in))) <= data_in;
            end if;
        end if;
    end process;

    data_out1 <= reg(to_integer(SIGNED(addr_out1)));
    data_out2 <= reg(to_integer(SIGNED(addr_out2)));
end BEH;